﻿/*
 *	Copyright (c) 2009 Queensland University of Technology. All rights reserved.
 *	The QUT Bioinformatics Collection is open source software released under the 
 *	Microsoft Public License (Ms-PL): http://www.microsoft.com/opensource/licenses.mspx.
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using QUT.Bio.Util;
using QUT.Bio.SilverMap;

namespace SilverMap {
#pragma warning disable 1591
	/// <summary>
	/// The main application class for the SilverMap web client.
	/// </summary>

	public partial class App : Application {
		public App () {
			this.Startup += this.Application_Startup;
			this.Exit += this.Application_Exit;
			this.UnhandledException += this.Application_UnhandledException;

			InitializeComponent();
		}

		private void Application_Startup ( object sender, StartupEventArgs e ) {
			RootVisual = new Page();
		}

		private void Application_Exit ( object sender, EventArgs e ) {
		}

		private void Application_UnhandledException ( object sender, ApplicationUnhandledExceptionEventArgs e ) {
			// If the app is running outside of the debugger then report the exception using
			// the browser's exception mechanism. On IE this will display it a yellow alert 
			// icon in the status bar and Firefox will display a script error.
			if ( !System.Diagnostics.Debugger.IsAttached ) {

				// NOTE: This will allow the application to continue running after an exception has been thrown
				// but not handled. 
				// For production applications this error handling should be replaced with something that will 
				// report the error to the website and stop the application.
				e.Handled = true;
				Deployment.Current.Dispatcher.BeginInvoke( delegate {
					ReportErrorToDOM( e );
				} );
			}
		}

		private void ReportErrorToDOM ( ApplicationUnhandledExceptionEventArgs e ) {
			try {
				string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
				errorMsg = errorMsg.Replace( '"', '\'' ).Replace( "\r\n", @"\n" );

				System.Windows.Browser.HtmlPage.Window.Alert( String.Format( 
					"{0}\n\n{1}",
					"Unhandled error in Silverlight application",
					e.ExceptionObject
				) );
			}
			catch ( Exception ) {
			}
		}
	}
#pragma warning restore 1591
}
